package com.jlb.demo.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

/**
 * 数据库工具类 - 演示异常处理
 */
public class DBUtil {
    
    // 数据库连接配置
    private static final String URL = "jdbc:mysql://localhost:3306/demo?useSSL=false&serverTimezone=UTC";
    private static final String USERNAME = "root";
    private static final String PASSWORD = "123456";
    
    /**
     * 获取数据库连接
     * @return 数据库连接
     * @throws RuntimeException 当连接失败时抛出异常
     */
    public static Connection getConnection() {
        Connection conn = null;
        try {
            // 加载数据库驱动（可能抛出ClassNotFoundException）
            Class.forName("com.mysql.cj.jdbc.Driver");
            
            // 获取连接（可能抛出SQLException）
            conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
            
            System.out.println("✅ 数据库连接成功");
            return conn;
            
        } catch (ClassNotFoundException e) {
            // 处理驱动未找到异常
            System.err.println("❌ 数据库驱动未找到：" + e.getMessage());
            throw new RuntimeException("数据库驱动未找到", e);
            
        } catch (SQLException e) {
            // 处理连接失败异常
            System.err.println("❌ 数据库连接失败：" + e.getMessage());
            throw new RuntimeException("数据库连接失败", e);
        }
    }
    
    /**
     * 关闭数据库连接
     * @param conn 数据库连接
     */
    public static void closeConnection(Connection conn) {
        if (conn != null) {
            try {
                conn.close();
                System.out.println("✅ 数据库连接已关闭");
            } catch (SQLException e) {
                System.err.println("❌ 关闭数据库连接失败：" + e.getMessage());
            }
        }
    }
    
    /**
     * 测试数据库连接
     */
    public static void testConnection() {
        Connection conn = null;
        try {
            conn = getConnection();
            System.out.println("数据库连接测试成功！");
            
        } catch (Exception e) {
            System.err.println("数据库连接测试失败：" + e.getMessage());
            System.out.println("注意：这是正常的，因为我们没有真实的数据库环境");
            
        } finally {
            closeConnection(conn);
        }
    }
} 